package SinglePattern.DoubleLock;

/**
 * 双检锁/双重校验锁（DCL，即 double-checked locking）
 * 这种方式采用双锁机制，安全且在多线程情况下能保持高性能。
 * 为什么这种能提升性能呢？
 * 这里我重点讲下：如果直接加锁，那么10个线程来了，
 *               那这10个线程需要排队；但是采用双检锁/双重校验锁的方式
 *               10个线程来了，如果已经有实例了，直接返回实例，
 *               这样就不需要排队了，从而提高了性能。
 * @author
 * @create 2018-10-18 12:20
 **/
public class Single {
    private static volatile Single instance;

    private Single (){}

    public static Single getInstance(){
        if (instance == null) {
            synchronized (Single.class) {
                instance = new Single();
            }
        }
        return instance;
    }
    public void sayHello(){
        System.out.println("helloword");
    }
}
